﻿using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using Infragistics.Win;
using Infragistics.Win.UltraWinGrid;
using Litografia.BusinessComponents;
using Litografia.BusinessEntities;
using Litografia.UI.Reports;
using Microsoft.Reporting.WinForms;
using BeforeExitEditModeEventArgs = Infragistics.Win.UltraWinGrid.BeforeExitEditModeEventArgs;
using Microsoft.Practices.EnterpriseLibrary.Security;
using Nortec.Security;
using System.Collections.Generic;
using ColumnStyle = Infragistics.Win.UltraWinGrid.ColumnStyle;

namespace Litografia.UI.Procesos
{
    public partial class RegistroOTForm : BaseForm
    {
        #region Constructors

        public RegistroOTForm()
        {
            InitializeComponent();
            toolStrip.ItemClicked += ToolStripItemClicked;
        }

        #endregion

        #region Declarations
        private bool validForm = true;
        private bool validControl;
        private bool loadingOT;
        private bool isNewOrder;
        private BEOT registro = new BEOT();
        private readonly Color blockedColor = Color.Tan;
        private readonly Color activeColor = Color.White;
        private int ordenRowDeleted;
        private readonly UltraDropDown materialDropDown = new UltraDropDown();

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
        private readonly IEnumerable<BEEntity> estadosList = BCOT.GetEstados();

        private const string SobreProduccionReport = "Litografia.UI.Reports.SobreProduccion.rdlc";
        #endregion

        #region Properties
        public BEOT.OrdenTrabajoRow OrdenTrabajo
        {
            get
            {
                return registro.OrdenTrabajo[0];
            }
        }
        private bool OrderLoaded
        {
            get
            {
                return (registro.OrdenTrabajo.Count > 0);
            }
        }
        #endregion

        #region Event Handlers

        private void MantOTFormLoad(object sender, EventArgs e)
        {
            ConfigureToolBar(toolStrip, ToolBarButtons.Save |
                                        ToolBarButtons.New |
                                        ToolBarButtons.InProcess |
                                        ToolBarButtons.Delete |
                                        ToolBarButtons.Print |
                                        ToolBarButtons.Close);

            BindMaterialsDropDown();

            ConfigureGrids();

            productoTextBox.Entity = EntityType.Producto;
            clienteTextBox.Entity = EntityType.Cliente;
            vendedorTextBox.Entity = EntityType.Vendedor;

            ClearControls();
        }

        private void ClienteTextBoxSelectionChangedEvent(object sender, EventArgs e)
        {
            clienteLabel.Text = !String.IsNullOrEmpty(clienteTextBox.SelectedId) ? clienteTextBox.SelectedName : "";
        }

        private void ProductoTextBoxSelectionChangedEvent(object sender, EventArgs e)
        {
            productoLabel.Text = !String.IsNullOrEmpty(productoTextBox.SelectedId) ? productoTextBox.SelectedName : "";
        }

        private void VendedorTextBoxSelectionChangedEvent(object sender, EventArgs e)
        {
            vendedorLabel.Text = !String.IsNullOrEmpty(vendedorTextBox.SelectedId) ? vendedorTextBox.SelectedName : "";
        }

        private void ToolStripItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch ((ToolBarButtons)e.ClickedItem.Tag)
            {
                case ToolBarButtons.Save:
                    Save();
                    break;
                case ToolBarButtons.New:
                    ClearControls();
                    break;
                case ToolBarButtons.Print:
                    PrintSobreProduccion();
                    break;
                case ToolBarButtons.Delete:
                    if (ShowQuestion("¿Está seguro de cerrar la Anular la Orden de Trabajo actual?"))
                        Save((int)OTEstado.Anulada);
                    break;
                case ToolBarButtons.Close:
                    Close();
                    break;
                case ToolBarButtons.InProcess:
                    Save((int)OTEstado.EnProceso);
                    break;
            }
        }

        private void GridInitializeLayout(object sender, InitializeLayoutEventArgs e)
        {
            var gridBand = e.Layout.Bands[0];
            var materialTable = registro.OTMaterialCotizado;
            var entregaTable = registro.OTEntrega;
            const int numericWidth = 60;

            switch (e.Layout.Grid.Name)
            {
                case "articulosGrid":
                    e.Layout.Override.WrapHeaderText = DefaultableBoolean.True;
                    gridBand.Columns[materialTable.IdColumn.ColumnName].Hidden = true;
                    gridBand.Columns[materialTable.OTIdColumn.ColumnName].Hidden = true;

                    gridBand.Columns[materialTable.MaterialColumn.ColumnName].Width = 100;
                    gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].Width = 220;
                    gridBand.Columns[materialTable.PapelColumn.ColumnName].Width = 90;
                    gridBand.Columns[materialTable.TamanoPliegoMaterialColumn.ColumnName].Width = numericWidth;
                    gridBand.Columns[materialTable.TamanoPliegoPrensaColumn.ColumnName].Width = numericWidth;
                    gridBand.Columns[materialTable.CantidadColumn.ColumnName].Width = numericWidth;
                    gridBand.Columns[materialTable.AumentoColumn.ColumnName].Width = numericWidth;
                    gridBand.Columns[materialTable.PliegosTotalColumn.ColumnName].Width = numericWidth;
                    gridBand.Columns[materialTable.MontajeColumn.ColumnName].Width = numericWidth;

                    gridBand.Columns[materialTable.PliegosPrensaTotalColumn.ColumnName].Width = numericWidth;
                    gridBand.Columns[materialTable.NoCotizadoColumn.ColumnName].Width = numericWidth;
                                     
                    gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].Style = ColumnStyle.DropDownList;
                    gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].ValueList = materialDropDown;

                    DisableColum(gridBand, materialTable.NoCotizadoColumn.ColumnName);
                    DisableColum(gridBand, materialTable.PliegosPrensaTotalColumn.ColumnName);
                    DisableColum(gridBand, materialTable.PapelColumn.ColumnName);

                    break;

                case "entregasGrid":
                    gridBand.Columns[entregaTable.IdColumn.ColumnName].Hidden = true;
                    gridBand.Columns[entregaTable.OTIdColumn.ColumnName].Hidden = true;
                    gridBand.Columns[entregaTable.FechaInicialColumn.ColumnName].Hidden = true;
                    gridBand.Columns[entregaTable.FechaFinalColumn.ColumnName].Hidden = true;
                    gridBand.Columns[entregaTable.UnidadesProducidasColumn.ColumnName].Hidden = true;
                    gridBand.Columns[entregaTable.ManoObraIndirectaColumn.ColumnName].Hidden = true;
                    gridBand.Columns[entregaTable.EstadoIdColumn.ColumnName].Hidden = true;

                    gridBand.Columns[entregaTable.OrdenColumn.ColumnName].Width = 50;
                    gridBand.Columns[entregaTable.UnidadesSolicitadasColumn.ColumnName].Width = 60;
                    gridBand.Columns[entregaTable.FechaEntregaColumn.ColumnName].Width = 70;
                    gridBand.Columns[entregaTable.EstadoNombreColumn.ColumnName].Width = 70;
                    gridBand.SortedColumns.Add(gridBand.Columns[entregaTable.OrdenColumn.ColumnName], false);
                    e.Layout.Override.HeaderClickAction = HeaderClickAction.Select;
                    e.Layout.Override.SelectTypeCol = SelectType.None;
                    
                    e.Layout.AutoFitStyle = AutoFitStyle.ResizeAllColumns;

                    DisableColum(gridBand, entregaTable.EstadoNombreColumn.ColumnName);
                    DisableColum(gridBand, entregaTable.OrdenColumn.ColumnName);

                    break;
            }
            FormatNumbers(e.Layout.Grid);
        }

        private void GridBeforeExitEditMode(object sender, BeforeExitEditModeEventArgs e)
        {
            UltraGridCell cell = null;
            Type cellType = null;

            if (articulosGrid.ActiveCell != null)
            {
                cell = articulosGrid.ActiveCell;
                cellType = registro.OTMaterialCotizado.Columns[cell.Column.Index].DataType;
            }
            else if (entregasGrid.ActiveCell != null)
            {
                cell = entregasGrid.ActiveCell;
                cellType = registro.OTEntrega.Columns[cell.Column.Index].DataType;
            }

            if (cell != null)
            {
                switch (cellType.ToString())
                {
                    case "System.Decimal":
                        decimal dummy;
                        if (!string.IsNullOrEmpty(cell.Text) && !decimal.TryParse(cell.Text, out dummy))
                        {
                            ShowError("El valor ingresado en el campo \"" + cell.Column.Header.Caption + "\" no es válido");
                            e.Cancel = true;
                        }
                        break;
                }
            }
        }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "currentGridName")]
        private void GridBeforeRowUpdate(object sender, CancelableRowEventArgs e)
        {
            var currentGridName = ((UltraGrid)sender).Name;
            BEOT.OTMaterialCotizadoRow articuloRow;
            BEOT.OTEntregaRow entregaRow;

            switch (currentGridName)
            {
                case "articulosGrid":

                    if (e.Row.Cells[registro.OTMaterialCotizado.PapelNombreColumn.ColumnName].Value == Convert.DBNull)
                    {
                        ShowError("Debe seleccionar un papel para actualizar un registro");
                        e.Cancel = true;
                    }
                    else if (e.Row.Cells[registro.OTMaterialCotizado.PapelColumn.ColumnName].Value != Convert.DBNull)
                    {
                        
                        
                        if (e.Row.Cells[registro.OTMaterialCotizado.TamanoPliegoMaterialColumn.ColumnName].Value == Convert.DBNull)
                        {
                            ShowError("Debe ingresar el tamaño del pliego material para actualizar un registro");
                            e.Cancel = true;
                        }
                        else if (e.Row.Cells[registro.OTMaterialCotizado.TamanoPliegoPrensaColumn.ColumnName].Value == Convert.DBNull)
                        {
                            ShowError("Debe ingresar el tamaño del pliego prensa para actualizar un registro");
                            e.Cancel = true;
                        }
                        else if ((e.Row.Cells[registro.OTMaterialCotizado.CantidadColumn.ColumnName].Value == Convert.DBNull ||
                            (decimal)e.Row.Cells[registro.OTMaterialCotizado.CantidadColumn.ColumnName].Value <= 0) && !IsOrderInProcess() && !IsOrderTerminated())
                        {
                            ShowError("Debe ingresar un número mayor a cero en la cantidad de material cotizado");
                            e.Cancel = true;
                        }
                        else if ((e.Row.Cells[registro.OTMaterialCotizado.NoCotizadoColumn.ColumnName].Value == Convert.DBNull ||
                            (decimal)e.Row.Cells[registro.OTMaterialCotizado.NoCotizadoColumn.ColumnName].Value <= 0) && IsOrderInProcess() && !IsOrderTerminated() && e.Row.IsAddRow)
                        {
                            ShowError("Debe ingresar un número mayor a cero en la cantidad de material NO COTIZADO");
                            e.Cancel = true;
                        }
                        else if ((e.Row.Cells[registro.OTMaterialCotizado.MontajeColumn.ColumnName].Value == Convert.DBNull ||
                            (decimal)e.Row.Cells[registro.OTMaterialCotizado.MontajeColumn.ColumnName].Value <= 0))
                        {
                            ShowError("Debe ingresar un número mayor a cero en el valor de Montaje");
                            e.Cancel = true;
                        }
                    }

                    if (!e.Cancel)
                    {
                        articuloRow = (BEOT.OTMaterialCotizadoRow)((DataRowView)e.Row.ListObject).Row;
                        articuloRow.OTId = OrdenTrabajo.Id;
                    }
                    break;

                case "entregasGrid":
                    if (e.Row.Cells[registro.OTEntrega.FechaEntregaColumn.ColumnName].Value == Convert.DBNull)
                    {
                        ShowError("Debe ingresar la fecha de entrega para actualizar un registro");
                        e.Cancel = true;
                    }
                    else if (e.Row.Cells[registro.OTEntrega.UnidadesSolicitadasColumn.ColumnName].Value == Convert.DBNull)
                    {
                        ShowError("Debe ingresar las unidades solicitadas para actualizar un registro");
                        e.Cancel = true;
                    }
                    else
                    {
                        decimal cantidad = 0;
                        foreach (var row in entregasGrid.Rows)
                            cantidad += (decimal)row.Cells[registro.OTEntrega.UnidadesSolicitadasColumn.ColumnName].Value;
                        cantidadTextBox.Value = cantidad;
                    }

                    if (!e.Cancel)
                    {
                        entregaRow = (BEOT.OTEntregaRow)((DataRowView)e.Row.ListObject).Row;
                        entregaRow.OTId = OrdenTrabajo.Id;

                        if (entregaRow.RowState == DataRowState.Detached)
                        {
                            entregaRow.EstadoNombre = "Abierta";
                            entregaRow.EstadoId = Int32.Parse(GetEstadoIdByNombre(estadosList, entregaRow.EstadoNombre));
                            entregaRow.Orden = GetOrdenMaximoEntrega() + 1;
                            entregasGrid.DataBind();
                        }
                    }
                    break;
            }
        }

        private void OrdenTrabajoTextBoxValidated(object sender, EventArgs e)
        {
            if (!loadingOT)
                GetRegistroOT();
        }

        private void OrdenTrabajoTextBoxKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                GetRegistroOT();
        }

        private void ArticulosGridAfterExitEditMode(object sender, EventArgs e)
        {
            if (articulosGrid.ActiveCell != null)
            {
                var currentRow = articulosGrid.ActiveCell.Row;
                if (currentRow.Cells[registro.OTMaterialCotizado.CantidadColumn.ColumnName].Value == Convert.DBNull)
                    currentRow.Cells[registro.OTMaterialCotizado.CantidadColumn.ColumnName].Value = 0;

                if (currentRow.Cells[registro.OTMaterialCotizado.AumentoColumn.ColumnName].Value == Convert.DBNull)
                    currentRow.Cells[registro.OTMaterialCotizado.AumentoColumn.ColumnName].Value = 0;

                if (currentRow.Cells[registro.OTMaterialCotizado.NoCotizadoColumn.ColumnName].Value == Convert.DBNull)
                    currentRow.Cells[registro.OTMaterialCotizado.NoCotizadoColumn.ColumnName].Value = 0;

                var cantidad = GetCellValue(currentRow.Cells[registro.OTMaterialCotizado.CantidadColumn.ColumnName]);
                var aumento = GetCellValue(currentRow.Cells[registro.OTMaterialCotizado.AumentoColumn.ColumnName]);
                var montaje = GetCellValue(currentRow.Cells[registro.OTMaterialCotizado.MontajeColumn.ColumnName]);
                var noCotizado = GetCellValue(currentRow.Cells[registro.OTMaterialCotizado.NoCotizadoColumn.ColumnName]);
                var pliegosTotal = cantidad + aumento;
                
                currentRow.Cells[registro.OTMaterialCotizado.PliegosTotalColumn.ColumnName].Value = pliegosTotal;
                currentRow.Cells[registro.OTMaterialCotizado.PliegosPrensaTotalColumn.ColumnName].Value = Math.Round((pliegosTotal + noCotizado) * montaje, 2);
            }
        }

        private void EntregasGridBeforeRowsDeleted(object sender, BeforeRowsDeletedEventArgs e)
        {
            e.DisplayPromptMsg = false;
            
            ordenRowDeleted = 0;

            if (e.Rows.Length > 0)
            {
                var result = MessageBox.Show("¿Está seguro que desea borrar esta entrega?", "Borrar Entrega?", MessageBoxButtons.YesNo);

                if (result == DialogResult.Yes)
                {
                    ordenRowDeleted = ((BEOT.OTEntregaRow)((DataRowView)e.Rows[0].ListObject).Row).Orden;
                    e.Cancel = false;
                }
                else e.Cancel = true;
            }
            else e.Cancel = true;
        }

        private void EntregasGridAfterRowsDeleted(object sender, EventArgs e)
        {
            if (ordenRowDeleted > 0)
            {
                foreach (BEOT.OTEntregaRow entrega in registro.OTEntrega.Rows)
                {
                    if (entrega.RowState != DataRowState.Deleted && entrega.RowState != DataRowState.Detached && entrega.Orden > ordenRowDeleted)
                        entrega.Orden = entrega.Orden - 1;
                }
                ordenRowDeleted = 0;
                decimal cantidad = 0;
                foreach (var row in entregasGrid.Rows)
                    cantidad += (decimal)row.Cells[registro.OTEntrega.UnidadesSolicitadasColumn.ColumnName].Value;
                cantidadTextBox.Value = cantidad;
            }
        }

        private static void ArticulosGridBeforeRowsDeleted(object sender, BeforeRowsDeletedEventArgs e)
        {
            e.DisplayPromptMsg = false;

            if (e.Rows.Length > 0)
            {
                var result = MessageBox.Show("¿Está seguro que desea remover este artículo de la cotización?", "Borrar Artículo?", MessageBoxButtons.YesNo);
                e.Cancel = ((result == DialogResult.Yes) ? false : true);
            }
            else e.Cancel = true;
        }

        private void GridAfterCellUpdate(object sender, CellEventArgs e)
        {
            if (e.Cell.Column.Key == registro.OTMaterialCotizado.PapelNombreColumn.ColumnName)
                e.Cell.Row.Cells[registro.OTMaterialCotizado.PapelColumn.ColumnName].Value = e.Cell.Value;
        }

        private void DisableColum(UltraGridBand gridBand, string columnName)
        {
            gridBand.Columns[columnName].CellActivation = Activation.NoEdit;
            gridBand.Columns[columnName].CellAppearance.BackColor = blockedColor;
            gridBand.Columns[columnName].TabStop = false;
        }

        #endregion

        #region Methods: Non-Public
        private void PrintSobreProduccion()
        {
            var parameters = new List<ReportParameter>();
            var data = new BEOT();
            BCOT.GetOTCotizacion(ordenTrabajoTextBox.Text, data);

            var report = new ReportViewerForm { ReportTitle = "Sobre de Producción" };
            report.BuildReport(data, SobreProduccionReport, parameters);
            ShowScreen(report);
        }
        private int GetOrdenMaximoEntrega()
        {
            int max = 0;

            foreach (BEOT.OTEntregaRow entrega in registro.OTEntrega.Rows)
            {
                if (entrega.RowState != DataRowState.Deleted && entrega.RowState != DataRowState.Detached && max < entrega.Orden)
                    max = entrega.Orden;
            }
            return max;
        }
        private void ValidateAllControls()
        {
            validForm = true;
            foreach (Control control in Controls)
            {
                // Set focus on control
                control.Focus();
                // Validate causes the control's Validating event to be fired,
                // if CausesValidation is True
                validControl = true;
                Validate();
                if (!validControl)
                    validForm = false;
            }
            if (validForm)  // Only when there were no previous errors
                ValidateFechaEntrega();
        }
        private void ValidateFechaEntrega()
        {
            if (entregasGrid.Rows.Count <= 0) return;
            var row = entregasGrid.Rows[entregasGrid.Rows.Count - 1];
            if (row.IsDataRow)
            {
                var date = Convert.ToDateTime(row.Cells[registro.OTEntrega.FechaEntregaColumn.ColumnName].Value);
                if (date != fechaEntregaDateTime.Value)
                {
                    ShowError("La fecha de la última entrega debe coincidir con la fecha de entrega de la cotización");
                    validForm = false;
                }
            }
        }

        private void Save()
        {
            Save(0);
        }
        private void Save(int status)
        {
            try
            {
                validForm = true;
                var validEntregasGrid = true;
                var validArticulosGrid = true;
                Cursor.Current = Cursors.WaitCursor;
                toolStrip.Focus();

                if ((status == 0 && (OrdenTrabajo.EstadoId == (int)OTEstado.EnProceso)) ||
                    (status == (int)OTEstado.EnProceso))
                {
                    if (entregasGrid.Rows.Count == 0)
                        validEntregasGrid = false;

                    if (articulosGrid.Rows.Count == 0)
                        validArticulosGrid = false;

                    if (validEntregasGrid && validArticulosGrid)
                        ValidateAllControls();
                }

                if (!validForm)
                    ShowError("Existen errores en los datos. Favor siga las recomendaciones brindadas en los detalles del error e intente de nuevo");
                else if (!validEntregasGrid)
                    ShowError("Debe ingresar al menos una entrega para procesar la cotización");
                else if (!validArticulosGrid)
                    ShowError("Debe ingresar al menos un artículo para procesar la cotización");
                else
                {
                    Pack(status);
                    BCOT.SaveOTCotizacion(registro);
                    ClearControls();
                    ShowConfirmation(status == (int) OTEstado.Anulada
                                         ? "La Orden de Trabajo fue anulada"
                                         : "La Orden de Trabajo fue guardada exitosamente");
                }
            }
            catch (Exception ex)
            {
                DisplayError("Error encontrado al salvar la OT", ex);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        private void Pack(int status)
        {
            if (!String.IsNullOrEmpty(clienteTextBox.Text))
            {
                OrdenTrabajo.ClienteId = clienteTextBox.SelectedId;
                OrdenTrabajo.ClienteNombre = clienteLabel.Text;
            }
            else
            {
                OrdenTrabajo.SetClienteIdNull();
                OrdenTrabajo.SetClienteNombreNull();
            }

            if (!String.IsNullOrEmpty(productoTextBox.Text))
            {
                OrdenTrabajo.ProductoId = productoTextBox.SelectedId;
                OrdenTrabajo.ProductoNombre = productoLabel.Text;
            }
            else
            {
                OrdenTrabajo.SetProductoIdNull();
                OrdenTrabajo.SetProductoNombreNull();
            }

            if (!String.IsNullOrEmpty(vendedorTextBox.Text))
            {
                OrdenTrabajo.VendedorId = Int16.Parse(vendedorTextBox.SelectedId);
                OrdenTrabajo.VendedorNombre = vendedorLabel.Text;
            }
            else
            {
                OrdenTrabajo.SetVendedorIdNull();
                OrdenTrabajo.SetVendedorNombreNull();
            }

            OrdenTrabajo.FechaEntrega = fechaEntregaDateTime.Value.Date;

            OrdenTrabajo.Factura = facturaTextBox.Text;

            OrdenTrabajo.Cantidad = ((!String.IsNullOrEmpty(cantidadTextBox.Text.Trim())) ? Decimal.Parse(cantidadTextBox.Text) : 0);

            OrdenTrabajo.TamanoFinal = tamanoFinalTextBox.Text.Trim();

            OrdenTrabajo.GastosIndirectos = ((!String.IsNullOrEmpty(gastosIndirectosTextBox.Text.Trim())) ? Decimal.Parse(gastosIndirectosTextBox.Text) : 0);

            OrdenTrabajo.HorasPrensas = ((!String.IsNullOrEmpty(horasPrensasTextBox.Text.Trim())) ? Decimal.Parse(horasPrensasTextBox.Text) : 0);

            OrdenTrabajo.HorasAcabados = ((!String.IsNullOrEmpty(horasAcabadosTextBox.Text.Trim())) ? Decimal.Parse(horasAcabadosTextBox.Text) : 0);

            OrdenTrabajo.CantidadDommies = ((!String.IsNullOrEmpty(dommiesTextBox.Text.Trim())) ? Int32.Parse(dommiesTextBox.Text) : 0);

            OrdenTrabajo.Comentarios = comentariosTextBox.Text;

            OrdenTrabajo.AcabadosFinales = acabadosTextBox.Text;

            OrdenTrabajo.Observaciones = observacionesTextBox.Text;

            OrdenTrabajo.DibujoMontaje = dibujoMontajeTextBox.Text;

            OrdenTrabajo.Boleta = boletaTextBox.Text;

            OrdenTrabajo.PruebaColor = pruebaColorCheckBox.Checked;
            OrdenTrabajo.TrabajoNuevo = trabajoNuevoCheckBox.Checked;
            OrdenTrabajo.ReimpresionExacta = reimpresionExactaCheckBox.Checked;
            OrdenTrabajo.ReimpresionCambios = reimpresionCambiosCheckBox.Checked;
            OrdenTrabajo.Laser = laserCheckBox.Checked;
            OrdenTrabajo.VistoBuenoMaquina = vbMaquinaCheckBox.Checked;

            OrdenTrabajo.FullColor = fullColorCheckBox.Checked;
            OrdenTrabajo.DosColores = dosColoresCheckBox.Checked;
            OrdenTrabajo.UnColor = unColorCheckBox.Checked;
            OrdenTrabajo.Pantone = pantoneCheckBox.Checked;
            OrdenTrabajo.Otros = otrosCheckBox.Checked;

            OrdenTrabajo.Impresion2Lados = retiroRadioButton.Checked;

            if (status > 0)
                OrdenTrabajo.EstadoId = status;
        }
        private void BindMaterialsDropDown()
        {
            materialDropDown.DisplayMember = "Nombre";
            materialDropDown.ValueMember = "Id";
            materialDropDown.DataSource = BCSearch.GetEntities(EntityType.Material, "");
            materialDropDown.DisplayLayout.Bands[0].Columns[0].Width = 140;
            materialDropDown.DisplayLayout.Bands[0].Columns[1].Width = 250;
        }
        private void ConfigureGrids()
        {
            ConfigureGrid(entregasGrid);
            ConfigureGrid(articulosGrid);
        }
        private void ConfigureGrid(UltraGrid grid)
        {
            grid.InitializeLayout += GridInitializeLayout;
            grid.BeforeExitEditMode += GridBeforeExitEditMode;
            grid.BeforeRowUpdate += GridBeforeRowUpdate;
            grid.AfterCellUpdate += GridAfterCellUpdate;
        }
        private void ClearControls()
        {
            entregasGrid.DataSource = new BEOT.OTEntregaDataTable();
            articulosGrid.DataSource = new BEOT.OTMaterialCotizadoDataTable();

            registro = new BEOT();

            ClearControls(Controls);
            ClearErrors();
            EnableDisableControls(false);
            tiroRadioButton.Checked = true;
            fechaCreacionValueLabel.Text = "";
            fechaCreacionLabel.Visible = false;
            estadoLabel.Visible = false;
            estadoTitleLabel.Visible = false;

            ordenTrabajoTextBox.Focus();
            loadingOT = false;
            isNewOrder = false;
        }
        private void GetRegistroOT()
        {
            var authProvider = AuthorizationFactory.GetAuthorizationProvider();
            var isSuperUser = authProvider.Authorize(NortecMembership.Principal, Privilegios.EditarOTEnProceso);
            var canUserEditData = authProvider.Authorize(NortecMembership.Principal, Privilegios.IngresarDatos);

            loadingOT = true;
            if (!String.IsNullOrEmpty(ordenTrabajoTextBox.Text))
            {
                BCOT.GetOTCotizacion(ordenTrabajoTextBox.Text, registro);

                if (registro.OrdenTrabajo.Count == 0)
                {
                    if (canUserEditData || isSuperUser)
                    {
                        if (ShowQuestion("La Orden de Trabajo no existe.  ¿Desea crearla para así poder continuar con el registro?"))
                        {
                            isNewOrder = true;
                            CreateOrdenTrabajoInCache();
                            articulosGrid.DataSource = registro.OTMaterialCotizado;
                            entregasGrid.DataSource = registro.OTEntrega;
                            EnableDisableControls(true);
                            clienteTextBox.Focus();

                        }
                    }
                    else ShowError("La OT especificada no pudo ser encontrada. Favor revise el número de OT e intente de nuevo.");
                }
                else
                {
                    isNewOrder = false;
                    UnPackOrdenTrabajo();
                    EnableDisableControls(true);
                }
            }
            loadingOT = false;

        }
        private bool IsOrderTerminated()
        {
            return ((OrdenTrabajo.EstadoId == (int)OTEstado.Cerrada) || (OrdenTrabajo.EstadoId == (int)OTEstado.Anulada));
        }
        private bool IsOrderInProcess()
        {
            return (OrdenTrabajo.EstadoId == (int)OTEstado.EnProceso);
        }
        private void CreateOrdenTrabajoInCache()
        {
            BEOT.OrdenTrabajoRow ot = registro.OrdenTrabajo.NewOrdenTrabajoRow();
            ot.NumeroOT = ordenTrabajoTextBox.Text.Trim();
            ot.FechaIngreso = DateTime.Now;
            ot.EmpresaId = NortecMembership.CompanyId;
            ot.EstadoId = Int32.Parse(GetEstadoIdByNombre(estadosList, "Abierta"));
            registro.OrdenTrabajo.AddOrdenTrabajoRow(ot);
            estadoLabel.Visible = true;
            estadoTitleLabel.Visible = true;
            estadoLabel.Text = "(Nueva)";
            fechaCreacionLabel.Visible = true;
            fechaCreacionValueLabel.Text = ot.FechaIngreso.ToString("dd/MM/yyyy");
        }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
        private void UnPackOrdenTrabajo()
        {

            BEOT.OrdenTrabajoRow ot = registro.OrdenTrabajo[0];
            string estado = GetEstadoNombre(estadosList, ot.EstadoId.ToString());
            ordenTrabajoTextBox.Text = ot.NumeroOT;

            //LOADING ORDEN TRABAJO HEADER DATA
            if (!ot.IsClienteIdNull())
            {
                clienteTextBox.Text = ot.ClienteId;
                clienteTextBox.SelectedId = ot.ClienteId;
                clienteLabel.Text = ot.ClienteNombre;
            }
            if (!ot.IsProductoIdNull())
            {
                productoTextBox.Text = ot.ProductoId;
                productoTextBox.SelectedId = ot.ProductoId;
                productoLabel.Text = ot.ProductoNombre;
            }

            if (!ot.IsVendedorIdNull())
            {
                vendedorTextBox.Text = ot.VendedorId.ToString();
                vendedorTextBox.SelectedId = ot.VendedorId.ToString();
                vendedorLabel.Text = ot.VendedorNombre;
            }

            estadoLabel.Text = "(" + estado + ")";
            estadoLabel.Visible = true;
            estadoTitleLabel.Visible = true;

            fechaCreacionLabel.Visible = true;
            fechaCreacionValueLabel.Text = ((!ot.IsFechaIngresoNull()) ? ot.FechaIngreso.ToString("dd/MM/yyyy") : "No Disponible");

            if (!ot.IsFechaEntregaNull())
                fechaEntregaDateTime.Value = ot.FechaEntrega;

            if (!ot.IsFacturaNull())
                facturaTextBox.Text = ot.Factura;

            if (!ot.IsCantidadNull())
                cantidadTextBox.Text = ot.Cantidad.ToString();

            if (!ot.IsTamanoFinalNull())
                tamanoFinalTextBox.Text = ot.TamanoFinal;

            //Checkboxes
            pruebaColorCheckBox.Checked = ((!ot.IsPruebaColorNull()) ? ot.PruebaColor : false);
            trabajoNuevoCheckBox.Checked = ((!ot.IsTrabajoNuevoNull()) ? ot.TrabajoNuevo : false);
            reimpresionExactaCheckBox.Checked = ((!ot.IsReimpresionExactaNull()) ? ot.ReimpresionExacta : false);
            reimpresionCambiosCheckBox.Checked = ((!ot.IsReimpresionCambiosNull()) ? ot.ReimpresionCambios : false);
            laserCheckBox.Checked = ((!ot.IsLaserNull()) ? ot.Laser : false);
            vbMaquinaCheckBox.Checked = ((!ot.IsVistoBuenoMaquinaNull()) ? ot.VistoBuenoMaquina : false);

            //Impresion 2 Lados
            retiroRadioButton.Checked = ((!ot.IsImpresion2LadosNull()) ? ot.Impresion2Lados : false);

            //Tintas
            fullColorCheckBox.Checked = ((!ot.IsFullColorNull()) ? ot.FullColor : false);
            dosColoresCheckBox.Checked = ((!ot.IsDosColoresNull()) ? ot.DosColores : false);
            unColorCheckBox.Checked = ((!ot.IsUnColorNull()) ? ot.UnColor : false);
            pantoneCheckBox.Checked = ((!ot.IsPantoneNull()) ? ot.Pantone : false);
            otrosCheckBox.Checked = ((!ot.IsOtrosNull()) ? ot.Otros : false);

            if (!ot.IsComentariosNull())
                comentariosTextBox.Text = ot.Comentarios;

            if (!ot.IsAcabadosFinalesNull())
                acabadosTextBox.Text = ot.AcabadosFinales;

            if (!ot.IsObservacionesNull())
                observacionesTextBox.Text = ot.Observaciones;

            if (!ot.IsBoletaNull())
                boletaTextBox.Text = ot.Boleta;

            if (!ot.IsDibujoMontajeNull())
                dibujoMontajeTextBox.Text = ot.DibujoMontaje;

            if (!ot.IsCantidadDommiesNull())
                dommiesTextBox.Text = ot.CantidadDommies.ToString();

            if (!ot.IsHorasPrensasNull())
                horasPrensasTextBox.Text = ot.HorasPrensas.ToString();

            if (!ot.IsHorasAcabadosNull())
                horasAcabadosTextBox.Text = ot.HorasAcabados.ToString();

            if (!ot.IsGastosIndirectosNull())
                gastosIndirectosTextBox.Text = ot.GastosIndirectos.ToString();

            articulosGrid.DataSource = registro.OTMaterialCotizado;
            entregasGrid.DataSource = registro.OTEntrega;
        }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
        private void EnableDisableControls(bool ordenLoaded)
        {
            var authProvider = AuthorizationFactory.GetAuthorizationProvider();
            var isSuperUser = authProvider.Authorize(NortecMembership.Principal, Privilegios.EditarOTEnProceso);
            var canUserEditData = authProvider.Authorize(NortecMembership.Principal, Privilegios.IngresarDatos);
            var isOrderInProcess = ((ordenLoaded) ? IsOrderInProcess() : false);
            var isOrderTerminated = ((ordenLoaded) ? IsOrderTerminated() : false);

            var enableControl = ordenLoaded && ((canUserEditData && !isOrderInProcess && !isOrderTerminated) || (isSuperUser && !isOrderTerminated));

            ordenTrabajoTextBox.Enabled = !ordenLoaded;
            clienteTextBox.Enabled = enableControl;
            productoTextBox.Enabled = enableControl;
            vendedorTextBox.Enabled = enableControl;

            facturaTextBox.Enabled = ordenLoaded && ((canUserEditData && !isOrderTerminated) || (isSuperUser && !isOrderTerminated));
            fechaEntregaDateTime.Enabled = enableControl;

            cantidadTextBox.Enabled = false;
            tamanoFinalTextBox.Enabled = enableControl;

            pruebaColorCheckBox.Enabled = enableControl;
            trabajoNuevoCheckBox.Enabled = enableControl;
            reimpresionExactaCheckBox.Enabled = enableControl;
            reimpresionCambiosCheckBox.Enabled = enableControl;
            laserCheckBox.Enabled = enableControl;

            fullColorCheckBox.Enabled = enableControl;
            dosColoresCheckBox.Enabled = enableControl;
            unColorCheckBox.Enabled = enableControl;
            pantoneCheckBox.Enabled = enableControl;
            otrosCheckBox.Enabled = enableControl;
            comentariosTextBox.Enabled = enableControl;
            dibujoMontajeTextBox.Enabled = enableControl;

            observacionesTextBox.Enabled = enableControl;
            acabadosTextBox.Enabled = enableControl;

            gastosIndirectosTextBox.Enabled = enableControl;
            horasAcabadosTextBox.Enabled = enableControl;
            horasPrensasTextBox.Enabled = enableControl;
            dommiesTextBox.Enabled = enableControl;
            boletaTextBox.Enabled = enableControl;

            tiroRadioButton.Enabled = enableControl;
            retiroRadioButton.Enabled = enableControl;

            EnableDisableArticulosGrid(ordenLoaded, isOrderInProcess, isOrderTerminated, canUserEditData, isSuperUser);
            EnableDisableEntregasGrid(ordenLoaded, isOrderInProcess, isOrderTerminated, canUserEditData, isSuperUser);

            ToggleButton(toolStrip, ToolBarButtons.Save, ordenLoaded && ((canUserEditData && !isOrderTerminated) || (isSuperUser && !isOrderTerminated)));
            ToggleButton(toolStrip, ToolBarButtons.Delete, enableControl && !isNewOrder);
            ToggleButton(toolStrip, ToolBarButtons.InProcess, ordenLoaded && (canUserEditData || isSuperUser) && !isOrderInProcess && !isOrderTerminated);
            ToggleButton(toolStrip, ToolBarButtons.Print, ordenLoaded);
        }
        private void EnableDisableArticulosGrid(bool ordenLoaded, bool isOrderInProcess, bool isOrderTerminated, bool canUserEditData, bool isSuperUser)
        {
            var allowEditArticulos = ordenLoaded && (canUserEditData || isSuperUser) && !isOrderInProcess && !isOrderTerminated;
            var gridBand = articulosGrid.DisplayLayout.Bands[0];
            var materialTable = registro.OTMaterialCotizado;

            articulosGrid.DisplayLayout.Override.AllowDelete = ((allowEditArticulos) ? DefaultableBoolean.True : DefaultableBoolean.False);
            articulosGrid.DisplayLayout.Override.AllowAddNew = ((allowEditArticulos) ? AllowAddNew.TemplateOnBottom : AllowAddNew.No);

            gridBand.Columns[materialTable.MaterialColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.MaterialColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);

            gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);

            gridBand.Columns[materialTable.TamanoPliegoMaterialColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.TamanoPliegoMaterialColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);

            gridBand.Columns[materialTable.TamanoPliegoPrensaColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.TamanoPliegoPrensaColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);

            gridBand.Columns[materialTable.CantidadColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.CantidadColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);

            gridBand.Columns[materialTable.AumentoColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.AumentoColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);

            gridBand.Columns[materialTable.MontajeColumn.ColumnName].CellActivation = ((allowEditArticulos) ? Activation.AllowEdit : Activation.NoEdit);
            gridBand.Columns[materialTable.MontajeColumn.ColumnName].CellAppearance.BackColor = ((allowEditArticulos) ? activeColor : blockedColor);
            
            gridBand.Columns[materialTable.PliegosTotalColumn.ColumnName].CellActivation = Activation.NoEdit;
            gridBand.Columns[materialTable.PliegosTotalColumn.ColumnName].CellAppearance.BackColor = blockedColor;

            if (ordenLoaded && isOrderInProcess && isSuperUser)
            {
                gridBand.Columns[materialTable.MaterialColumn.ColumnName].CellActivation = Activation.AllowEdit;
                gridBand.Columns[materialTable.MaterialColumn.ColumnName].CellAppearance.BackColor = activeColor;

                gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].CellActivation = Activation.AllowEdit;
                gridBand.Columns[materialTable.PapelNombreColumn.ColumnName].CellAppearance.BackColor = activeColor;

                gridBand.Columns[materialTable.NoCotizadoColumn.ColumnName].CellActivation = Activation.AllowEdit;
                gridBand.Columns[materialTable.NoCotizadoColumn.ColumnName].CellAppearance.BackColor = activeColor;

                gridBand.Columns[materialTable.TamanoPliegoMaterialColumn.ColumnName].CellActivation = Activation.AllowEdit;
                gridBand.Columns[materialTable.TamanoPliegoMaterialColumn.ColumnName].CellAppearance.BackColor = activeColor;

                gridBand.Columns[materialTable.TamanoPliegoPrensaColumn.ColumnName].CellActivation = Activation.AllowEdit;
                gridBand.Columns[materialTable.TamanoPliegoPrensaColumn.ColumnName].CellAppearance.BackColor = activeColor;

                DisableCellsExceptAddNew();

                articulosGrid.DisplayLayout.Override.AllowAddNew = AllowAddNew.TemplateOnBottom;
            }
            else
            {
                gridBand.Columns[materialTable.NoCotizadoColumn.ColumnName].CellActivation = Activation.NoEdit;
                gridBand.Columns[materialTable.NoCotizadoColumn.ColumnName].CellAppearance.BackColor = blockedColor;
            }
        }

        public void DisableCellsExceptAddNew()
        {
            foreach (var row in articulosGrid.Rows)
            {
                row.Cells[registro.OTMaterialCotizado.MaterialColumn.ColumnName].Activation = Activation.NoEdit;
                row.Cells[registro.OTMaterialCotizado.MaterialColumn.ColumnName].Appearance.BackColor = blockedColor;

                row.Cells[registro.OTMaterialCotizado.PapelColumn.ColumnName].Activation = Activation.NoEdit;
                row.Cells[registro.OTMaterialCotizado.PapelColumn.ColumnName].Appearance.BackColor = blockedColor;

                row.Cells[registro.OTMaterialCotizado.TamanoPliegoMaterialColumn.ColumnName].Activation = Activation.NoEdit;
                row.Cells[registro.OTMaterialCotizado.TamanoPliegoMaterialColumn.ColumnName].Appearance.BackColor = blockedColor;

                row.Cells[registro.OTMaterialCotizado.TamanoPliegoPrensaColumn.ColumnName].Activation = Activation.NoEdit;
                row.Cells[registro.OTMaterialCotizado.TamanoPliegoPrensaColumn.ColumnName].Appearance.BackColor = blockedColor;
            }
        }

        private void EnableDisableEntregasGrid(bool ordenLoaded, bool isOrderInProcess, bool isOrderTerminated, bool canUserEditData, bool isSuperUser)
        {
            var allowEditEntregas = ordenLoaded && (canUserEditData || isSuperUser) && !isOrderInProcess && !isOrderTerminated;
            entregasGrid.DisplayLayout.Override.AllowDelete = ((allowEditEntregas) ? DefaultableBoolean.True : DefaultableBoolean.False);
            entregasGrid.DisplayLayout.Override.AllowUpdate = ((allowEditEntregas) ? DefaultableBoolean.True : DefaultableBoolean.False);
            entregasGrid.DisplayLayout.Override.AllowAddNew = ((allowEditEntregas) ? AllowAddNew.TemplateOnBottom : AllowAddNew.No);


            entregasGrid.DisplayLayout.Bands[0].Columns[registro.OTEntrega.FechaEntregaColumn.ColumnName].CellAppearance.BackColor = ((allowEditEntregas) ? activeColor : blockedColor);
            entregasGrid.DisplayLayout.Bands[0].Columns[registro.OTEntrega.UnidadesSolicitadasColumn.ColumnName].CellAppearance.BackColor = ((allowEditEntregas) ? activeColor : blockedColor);

        }

        private void ClearErrors()
        {
            myErrorProvider.SetError(clienteLabel, "");
            myErrorProvider.SetError(productoLabel, "");
            myErrorProvider.SetError(vendedorLabel, "");
            myErrorProvider.SetError(gastosIndirectosTextBox, "");
            myErrorProvider.SetError(horasAcabadosTextBox, "");
            myErrorProvider.SetError(horasPrensasTextBox, "");
            myErrorProvider.SetError(cantidadTextBox, "");
            myErrorProvider.SetError(tamanoFinalTextBox, "");
            myErrorProvider.SetError(comentariosTextBox, "");
            myErrorProvider.SetError(boletaTextBox, "");
            myErrorProvider.SetError(dibujoMontajeTextBox, "");
        }

        private static decimal GetCellValue(UltraGridCell cell)
        {
            var value = cell.Value;
            return ((value == Convert.DBNull) ? 0 : Math.Round((decimal)value, 2));
        }

        #endregion

        #region Validation Events
        private void ClienteTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(clienteTextBox.Text) || String.IsNullOrEmpty(clienteLabel.Text))
                {
                    myErrorProvider.SetError(clienteLabel, "Favor especifique el cliente de la OT");
                    validControl = false;
                    return;
                }
            }

            myErrorProvider.SetError(clienteLabel, "");
        }
        private void ProductoTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(productoTextBox.Text) || String.IsNullOrEmpty(productoLabel.Text))
                {
                    myErrorProvider.SetError(productoLabel, "Favor especifique el producto terminado de la OT");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(productoLabel, "");
        }
        private void VendedorTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(vendedorTextBox.Text) || String.IsNullOrEmpty(vendedorLabel.Text))
                {
                    myErrorProvider.SetError(vendedorLabel, "Favor especifique el vendedor de la OT");
                    validControl = false;
                    return;
                }
            }

            myErrorProvider.SetError(vendedorLabel, "");
        }
        private void GastosIndirectosTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(gastosIndirectosTextBox.Text) || Decimal.Parse(gastosIndirectosTextBox.Text).Equals(0))
                {
                    myErrorProvider.SetError(gastosIndirectosTextBox, "Favor especifique el total de gastos indirectos");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(gastosIndirectosTextBox, "");
        }
        private void HorasAcabadosTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(horasAcabadosTextBox.Text) || Decimal.Parse(horasAcabadosTextBox.Text).Equals(0))
                {
                    myErrorProvider.SetError(horasAcabadosTextBox, "Favor especifique el total de horas de acabados");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(horasAcabadosTextBox, "");
        }
        private void HorasPrensasTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(horasPrensasTextBox.Text) || Decimal.Parse(horasPrensasTextBox.Text).Equals(0))
                {
                    myErrorProvider.SetError(horasPrensasTextBox, "Favor especifique el total de horas de prensas");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(horasPrensasTextBox, "");
        }
        private void CantidadTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(cantidadTextBox.Text) || Decimal.Parse(cantidadTextBox.Text).Equals(0))
                {
                    myErrorProvider.SetError(cantidadTextBox, "Favor especifique la cantidad de unidades por producir");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(cantidadTextBox, "");
        }
        private void TamanoFinalTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(tamanoFinalTextBox.Text))
                {
                    myErrorProvider.SetError(tamanoFinalTextBox, "Favor especifique el tamaño final");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(tamanoFinalTextBox, "");
        }
        private void ComentariosTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if ((pantoneCheckBox.Checked || otrosCheckBox.Checked) && String.IsNullOrEmpty(comentariosTextBox.Text))
                {
                    myErrorProvider.SetError(comentariosTextBox, "Favor especifique los detalles de tintas en el campo de comentarios");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(comentariosTextBox, "");
        }
        private void DibujoMontajeTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (OrderLoaded)
            {
                if (String.IsNullOrEmpty(dibujoMontajeTextBox.Text))
                {
                    myErrorProvider.SetError(dibujoMontajeTextBox, "Favor especifique el dibujo de montaje");
                    validControl = false;
                    return;
                }
            }
            myErrorProvider.SetError(dibujoMontajeTextBox, "");
        }
        #endregion
    }
}
